home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Experimental BBS Explossion 3
/
Experimental BBS Explossion III.iso
/
c
/
vgagraph.zip
/
MOUSE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-17
|
6KB
|
243 lines
#include <dos.h>;
#include <mem.h>;
#include "allproc.h"
extern unsigned int BytesPerLine,MaxX,MaxY;
void interrupt ( *oldvec)(void);
int x0,y0,xs0,ys0;
char INIT,STOP,ColorMouse;
unsigned int hi,lo;
char mousekey()
{
unsigned int w;
if (INIT==1) return(0);
asm{
mov ax,3
int 33h
}
return(_BX);
}
void MouseXY(int *X,int *Y)
{
asm{
mov ax,0Bh
int 33h
}
*X=_CX;
*Y=_DX;
}
void MouseSave()
{
unsigned int i,ofsp,ofsp1,x,l;
x=x0 >> 3;
l=3;
if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0105);
else
{
x=x0 >> 2;
l=5;
outport(0x03CE,0x0008);
outport(0x03C4,0x0f02);
}
ofsp=y0*BytesPerLine+x;
ofsp1=0xFFFF-88;
for (i=0;i<=16;i++)
{
move(0xA000,ofsp,0xA000,ofsp1,l);
ofsp+=BytesPerLine;
ofsp1+=l;
}
if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0005);
else outport(0x03CE,0xff08);
}
void MouseRead()
{
unsigned int i,ofsp,ofsp1,x,l;
x=x0 >> 3;
l=3;
if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0105);
else
{
l=5;
x=x0 >> 2;
outport(0x03CE,0x0008);
outport(0x03C4,0x0f02);
}
ofsp=y0*BytesPerLine+x;
ofsp1=0xFFFF-88;
for (i=0;i<=16;i++)
{
move(0xA000,ofsp1,0xA000,ofsp,l);
ofsp+=BytesPerLine;
ofsp1+=l;
}
if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0005);
else outport(0x03CE,0xff08);
}
void pixel(int x,int y,int col)
{
if (!((x>MaxX) || (y>MaxY))) putpixel(x,y,col);
}
void MouseShow(char col)
{
pixel(x0,y0,0);pixel(x0+1,y0,0);
pixel(x0,y0+1,0);pixel(x0+1,y0+1,col);
pixel(x0+2,y0+1,col);pixel(x0+3,y0+1,0);
pixel(x0+1,y0+2,0);pixel(x0+2,y0+2,col);
pixel(x0+3,y0+2,col);pixel(x0+4,y0+2,col);
pixel(x0+5,y0+2,0);
pixel(x0+1,y0+3,0);pixel(x0+2,y0+3,col);
pixel(x0+3,y0+3,col);pixel(x0+4,y0+3,col);
pixel(x0+5,y0+3,col);pixel(x0+6,y0+3,col);
pixel(x0+7,y0+3,0);
pixel(x0+2,y0+4,0);pixel(x0+3,y0+4,col);
pixel(x0+4,y0+4,col);pixel(x0+5,y0+4,col);
pixel(x0+6,y0+4,col);pixel(x0+7,y0+4,col);
pixel(x0+8,y0+4,col);pixel(x0+9,y0+4,0);
pixel(x0+2,y0+5,0);pixel(x0+3,y0+5,col);
pixel(x0+4,y0+5,col);pixel(x0+5,y0+5,col);
pixel(x0+6,y0+5,col);pixel(x0+7,y0+5,col);
pixel(x0+8,y0+5,col);pixel(x0+9,y0+5,col);
pixel(x0+10,y0+5,col);pixel(x0+11,y0+5,col);
pixel(x0+12,y0+5,0);
pixel(x0+2,y0+6,0);pixel(x0+3,y0+6,col);
pixel(x0+4,y0+6,col);pixel(x0+5,y0+6,col);
pixel(x0+6,y0+6,col);pixel(x0+7,y0+6,col);
pixel(x0+8,y0+6,col);pixel(x0+9,y0+6,col);
pixel(x0+10,y0+6,col);pixel(x0+11,y0+6,col);
pixel(x0+12,y0+6,col);pixel(x0+13,y0+6,col);
pixel(x0+14,y0+6,0);
pixel(x0+3,y0+7,0);pixel(x0+4,y0+7,col);
pixel(x0+5,y0+7,col);pixel(x0+6,y0+7,col);
pixel(x0+7,y0+7,col);pixel(x0+8,y0+7,col);
pixel(x0+9,y0+7,col);pixel(x0+10,y0+7,col);
pixel(x0+11,y0+7,col);pixel(x0+12,y0+7,col);
pixel(x0+13,y0+7,0);
pixel(x0+3,y0+8,0);pixel(x0+4,y0+8,col);
pixel(x0+5,y0+8,col);pixel(x0+6,y0+8,col);
pixel(x0+7,y0+8,col);pixel(x0+8,y0+8,col);
pixel(x0+9,y0+8,col);pixel(x0+10,y0+8,col);
pixel(x0+11,y0+8,col);pixel(x0+12,y0+8,0);
pixel(x0+3,y0+9,0);pixel(x0+4,y0+9,col);
pixel(x0+5,y0+9,col);pixel(x0+6,y0+9,col);
pixel(x0+7,y0+9,col);pixel(x0+8,y0+9,col);
pixel(x0+9,y0+9,col);pixel(x0+10,y0+9,col);
pixel(x0+11,y0+9,0);
pixel(x0+4,y0+10,0);pixel(x0+5,y0+10,col);
pixel(x0+6,y0+10,col);pixel(x0+7,y0+10,col);
pixel(x0+8,y0+10,col);pixel(x0+9,y0+10,col);
pixel(x0+10,y0+10,col);pixel(x0+11,y0+10,col);
pixel(x0+12,y0+10,0);
pixel(x0+4,y0+11,0);pixel(x0+5,y0+11,col);
pixel(x0+6,y0+11,col);pixel(x0+7,y0+11,col);
pixel(x0+8,y0+11,col);pixel(x0+9,y0+11,col);
pixel(x0+10,y0+11,col);pixel(x0+11,y0+11,col);
pixel(x0+12,y0+11,col);pixel(x0+13,y0+11,0);
pixel(x0+4,y0+12,0);pixel(x0+5,y0+12,col);
pixel(x0+6,y0+12,col);pixel(x0+7,y0+12,0);pixel(x0+8,y0+12,0);
pixel(x0+9,y0+12,0);pixel(x0+10,y0+12,col);
pixel(x0+11,y0+12,col);pixel(x0+12,y0+12,col);
pixel(x0+13,y0+12,col);pixel(x0+14,y0+12,0);
pixel(x0+5,y0+13,0);pixel(x0+6,y0+13,0);
pixel(x0+10,y0+13,0);pixel(x0+11,y0+13,col);
pixel(x0+12,y0+13,col);pixel(x0+13,y0+13,col);
pixel(x0+14,y0+13,0);
pixel(x0+5,y0+14,0);pixel(x0+11,y0+14,0);
pixel(x0+12,y0+14,0);pixel(x0+13,y0+14,0);
pixel(x0+12,y0+14,0);
}
void interrupt draw(void)
{
if (STOP==0)
{
MouseXY(&xs0,&ys0);
xs0=x0+xs0;
ys0=y0+ys0;
if (xs0<0) xs0=0;
if (xs0>MaxX) xs0=MaxX;
if (ys0<0) ys0=0;
if (ys0>MaxY) ys0=MaxY;
MouseRead();
x0=xs0;y0=ys0;
MouseSave();
MouseShow(ColorMouse);
}
}
void TMP()
{
long l;
l=(long)draw;
asm{
pushf
push cs
call l
}
}
void SetMouse(unsigned int w,unsigned int seg,unsigned int ofs)
{
unsigned int w1;
w1=seg;
asm{
mov ax,00Ch
mov cx,w
mov es,w1
mov dx,ofs
int 33h
}
}
void MouseStop()
{
if (INIT==0)
{
STOP=1;
MouseRead();
}
}
void MouseStart()
{
if (INIT==0)
{
MouseSave();
MouseShow(ColorMouse);
STOP=0;
}
}
char initmouse(int x00,int y00,int col)
{
INIT=1;
asm{
mov ax,0
int 33h
}
if (_AX==0) return(1);
setvect(0x1F,draw);
hi=(long)TMP >> 16;
lo=(long)TMP - (hi << 16);
SetMouse(1,hi,lo);
xs0=x00;ys0=y00;
x0=xs0;y0=ys0;
STOP=0;
ColorMouse=col;
MouseSave();
MouseShow(ColorMouse);
INIT=0;
return(0);
}
void closemouse()
{
MouseRead();
SetMouse(0,hi,lo);
}